A biblioteca PySide é um *wrapper* em Python para o Qt, um *toolkit* de interface gráfica do usuário (GUI) multiplataforma. O FreeCAD utiliza o Qt como seu principal *toolkit* de GUI. O Qt, por si só, é mais do que apenas um *toolkit* de GUI; trata-se de uma coleção de bibliotecas C++ voltadas para diversas finalidades — é possível, por exemplo, realizar operações de rede utilizando componentes da biblioteca Qt —, tudo isso acessível em Python por meio do PySide. Qualquer interface gráfica que possa ser criada em C++ também pode ser criada e modificada em Python. Uma vantagem de utilizar Python é que as interfaces Qt podem ser desenvolvidas e testadas em tempo real, uma vez que não há necessidade de compilar os arquivos de código-fonte.
A maneira recomendada de importar o PySide (de qualquer versão) no FreeCAD é:
from PySide import QtCore, QtGui, QtWidgets
Exemplos criados com PySide. À esquerda: uma caixa de diálogo simples. À direita: uma caixa de diálogo mais complexa com gráficos.
A ideia original por trás do FreeCAD era reunir o Cas.CADE (núcleo geométrico), o Qt (toolkit de GUI) e o Python para criar um programa de CAD paramétrico 3D gratuito com um mecanismo de script integrado. Isso ocorreu no início dos anos 2000 — ou seja, antes da existência do PySide; por isso, utilizou-se um wrapper diferente, o PyQt, durante a primeira década de existência do FreeCAD. O PySide surgiu para resolver questões de licenciamento relacionadas ao PyQt, e a migração do FreeCAD para o PySide foi realizada em 2013 (commit 1dc122dc9a).
Se você quiser saber qual versão do Qt sua instalação utiliza, a caixa de diálogo "Sobre" contém listas de versões que incluem o Qt.
Para mais informações, consulte:
Ao instalar o FreeCAD, você obtém tanto o Qt quanto a versão correspondente do PySide como parte do pacote. Se você mesmo estiver realizando a compilação, deve verificar se versões compatíveis dessas duas bibliotecas estão instaladas para que o FreeCAD funcione corretamente. Naturalmente, o PySide só funcionará se o Qt estiver presente.
A principal diferença entre o PySide e as bibliotecas subsequentes PySide2 e PySide6 reside nos namespaces. O PySide (Qt4) possui os namespaces principais QtGui e QtCore, enquanto o PySide2 (Qt5) e o PySide6 (Qt6) introduziram o namespace adicional QtWidgets, onde todos os widgets estão agora localizados — anteriormente, eles ficavam no namespace QtGui.
A abordagem do FreeCAD para lidar com as diferentes versões do Qt/PySide consiste em chamá-las todas de PySide — algo que, na verdade, deveria ser encarado como PySideX. Não importa qual versão do Qt/PySide esteja instalada; todas são importadas como PySide.
Um shim lida com as diferenças entre as versões. Este shim do PySide está localizado no diretório Ext/ de uma instalação do FreeCAD compilada para Qt5/Qt6.
/usr/share/freecad/Ext/PySide
Este módulo apenas importa as classes necessárias de PySide2/6 e as coloca no namespace PySide. Essa abordagem foi escolhida por sua capacidade de oferecer compatibilidade retroativa sob a perspectiva do Qt4.
PySide2.QtCore -> PySide.QtCore
PySide2.QtGui -> PySide.QtGui
PySide2.QtWidgets -> PySide.QtWidgets
PySide2.QtSvg -> PySide.QtSvg
PySide2.QtUiTools -> PySide.QtUiTools
Por esse motivo, as classes do PySide2.QtWidgets também são colocadas no namespace PySide.QtGui.
PySide2.QtWidgets.QCheckBox -> PySide.QtGui.QCheckBox
Mas a maneira recomendada atualmente é usar o sistema moderno de namespaces.
from PySide import QtCore, QtGui, QtWidgets
my_check_box = QtWidgets.QCheckBox()
Os exemplos do PySide estão divididos em três partes, diferenciadas pelo nível de exposição ao PySide, ao Python e aos componentes internos do FreeCAD. A primeira página apresenta uma visão geral do PySide; a segunda e a terceira páginas consistem principalmente em exemplos de código em diferentes níveis.
Espera-se que estes exemplos sejam úteis para começar e que, posteriormente, o usuário possa consultar outros recursos online ou a documentação oficial.
Existem algumas diferenças no tratamento de widgets entre as diferentes versões. Os programadores devem estar cientes dessas incompatibilidades e consultar a documentação oficial caso algo não funcione como esperado em uma determinada plataforma. Embora raro, às vezes pode ser necessário realizar chamadas específicas para cada versão utilizando estruturas condicionais (*if-clauses*).
A documentação do PySide refere-se às classes no estilo Python; entretanto, como Qt é originalmente uma biblioteca C++, a mesma informação deve estar disponível na referência C++ correspondente.